package com.kaifamiao.udp;

import java.io.*;
import java.net.*;
import java.io.*;
import java.net.*;

public class FolderReceiver {
    // 设置每个数据包的大小为1024字节
    private final static int PACKET_SIZE = 1024;
    private final static int PORT = 9999;  // 定义端口号为私有常量

    public static void main(String[] args) throws IOException {
        DatagramSocket socket = new DatagramSocket(PORT);  // 创建UDP套接字，监听8888端口
        byte[] buffer = new byte[PACKET_SIZE];  // 创建接收数据的缓冲区
        System.out.println("开始启动接收。。。");
        FileOutputStream fos = null;  // 文件输出流
        int expectedNameLen = -1;  // 期望的文件名长度

        while (true) {
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);  // 创建数据包对象
            socket.receive(packet);  // 接收数据包

            // 将接收到的数据解码为字符串
            String message = new String(packet.getData(), 0, packet.getLength(), "UTF-8");
            if (message.startsWith("NAMELEN:")) {  // 检查是否为文件名长度信息
                String[] parts = message.split(":");
                expectedNameLen = Integer.parseInt(parts[1]);
            } else if (expectedNameLen != -1) {  // 接收文件名
                String filename = new String(packet.getData(), 0, expectedNameLen, "UTF-8");
                System.out.println(filename);
                fos = new FileOutputStream("/Users/linrui/b/" + filename);
                expectedNameLen = -1;  // 重置期望的文件名长度为-1
            } else if (message.startsWith("END:")) {  // 检查是否为文件结束标志
                if (fos != null) {
                    fos.close();  // 关闭文件输出流
                    fos = null;
                }
            } else {  // 写入文件内容
                if (fos != null) {
                    fos.write(packet.getData(), 0, packet.getLength());
                }
            }
        }
    }
}
